home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / ciarnv85.arc / SAVEME.4TH < prev    next >
Text File  |  1986-04-08  |  2KB  |  64 lines

  1.                           ( SAVEME.4TH )
  2.  
  3. ( This program allows the user to save a version of FORTH which includes )
  4. ( a dictionary of voice vocabulary words. The voice vocabulary resides in )
  5. ( a separate segment of memory, and it will be loaded into memory when   )
  6. ( FORTH is loaded. )
  7.  
  8. HEX
  9.  
  10. : ZCAT SWAP ( Z1 Z2 -- > CONTCATINATES 0 TERMINATE STRINGS )
  11.    BEGIN DUP C@ WHILE 1+ REPEAT ( FIND THE END OF Z1 )
  12.    BEGIN OVER C@ DUP WHILE OVER C! 1 1 D+ REPEAT OVER C!
  13.    DDROP ;
  14.  
  15. : VSEG DSEGMENT 1000 + ; ( VOICE IS IN NEXT SEGMENT )
  16. CREATE VLOC 0 , ( NEXT AVAILABLE BYTE IN VOICE SEGMENT )
  17. C" .COM" ".COM
  18.  
  19. CODE       VSYS   ( VOICE SEGMENT FUNCTION CALLS )
  20. AX         POP    ( FUNCTION )
  21. CX         POP    ( NUMBER OF BYTES )
  22. DX         POP    ( LOCATION )
  23. DS         POP    ( SEGMENT ADDR )
  24. BX         POP    ( FILE HANDLE )
  25.            INT21                  
  26. AX         PUSH                   
  27. AX, CS     MOV
  28. DS, AX     MOV
  29. AX, # 0    MOV                    
  30. HERE 3 +   JB                     
  31. AX         INC                    
  32. AX         PUSH                   
  33. NEXT       JMP END-CODE           
  34.  
  35. : VCALL VSYS IF 0 ELSE 0 SWAP THEN IOERR ! ;
  36.  
  37. : IOCHK IOERR @ IF ." IOERR #" IOERR ? ABORT THEN ;
  38.  
  39. C" A:                   " VDF ( VOICE FILE DISK )
  40. C" XEVOICE.BIN" VDFN ( VOICE FILENAME )
  41. CREATE FHNDL 0 , ( variable holding the file handle of the device XE1 )
  42. CREATE VOC 1 , ( Flag for read of voice file )
  43.  
  44. CTAG
  45. : SAVEME FREEZE 0 FHNDL ! 1 VOC ! ZWORD DUP C@ 41 U<
  46.    IF DROP CR ." Name of file to save in (omit .COM)? " QUERY ZWORD THEN
  47.    DUP ".COM ZCAT
  48.    0 VDF C!
  49.    DUP 1+ C@ 3A = ( Disk qualification for system )
  50.    IF DUP C@ VDF C! 3A VDF 1+ C! THEN ( Yes, remember for voice )
  51.    0 VDF 2+ C!
  52.    CR ." Writing file '" DUP ZTYPE ." '" CR
  53.    DUP 0 FCREAT IOCHK
  54.    DUP 100 HERE FF - FWRITE HERE FF - - ABORT" WROTE SHORT."
  55.    FCLOSE IOCHK
  56.    ." Did the voice dictionary change? " KEY DUP EMIT CR 20 OR 79 =
  57.    IF 
  58.     VDF VDFN ZCAT ." Writing file '" VDF ZTYPE ." '" CR
  59.     VDF 0 FCREAT IOCHK
  60.     DUP VSEG 0 VLOC @ 4000 VCALL VLOC @ - ABORT" WROTE SHORT." ( VOICE )
  61.     FCLOSE IOCHK
  62.    THEN ;
  63. CTAG
  64.